import moment from 'moment'
import dicService from '@/api/dicService'

const columns = {
  projectLog: [
    {
      title: '人员',
      key: 'USERNAME',
      dataIndex: 'USERNAME',
      width: '10%',
      align: 'center'
    },
    {
      title: '环节',
      key: 'ACTIVITYNAME',
      dataIndex: 'ACTIVITYNAME',
      width: '10%',
      align: 'center'
    },
    {
      title: '操作',
      key: 'OPTTYPE',
      dataIndex: 'OPTTYPE',
      width: '10%',
      align: 'center'
    },
    {
      title: '操作时间',
      key: 'STARTTIME',
      dataIndex: 'STARTTIME',
      width: '15%',
      align: 'center',
      customRender: function (text, row, index) {
        return moment(row.STARTTIME).format('YYYY-MM-DD HH:mm:ss')
      }
    },
    {
      title: '操作内容',
      key: 'CONTENT',
      dataIndex: 'CONTENT',
      width: '35%',
      align: 'center'
    },
    {
      title: '操作原因',
      key: 'OPTREASON',
      dataIndex: 'OPTREASON',
      width: '20%',
      ellipsis: true,
      align: 'center'
    }
  ],
  proxySetting: [
    {
      title: '用户姓名',
      key: 'agentName',
      dataIndex: 'agentName',
      width: '18%',
      align: 'center'
    },
    {
      title: '开始时间',
      key: 'beginTime',
      dataIndex: 'beginTime',
      width: '18%',
      align: 'center',
      customRender: function (text, row, index) {
        return moment(row.beginTime).format('YYYY-MM-DD')
      }
    },
    {
      title: '结束时间',
      key: 'endTime',
      dataIndex: 'endTime',
      width: '18%',
      align: 'center',
      customRender: function (text, row, index) {
        return moment(row.endTime).format('YYYY-MM-DD')
      }
    },
    {
      title: '操作',
      key: 'operation',
      dataIndex: 'operation',
      width: '18%',
      align: 'center',
      scopedSlots: { customRender: 'action' }
    }
  ],
  projectRelation: [
    {
      title: '项目编号',
      key: 'PROJECTCODE',
      dataIndex: 'PROJECTCODE',
      width: '18%',
      align: 'center'
    },
    {
      title: '项目名称',
      key: 'PROJECTNAME',
      dataIndex: 'PROJECTNAME',
      width: '25%',
      align: 'center'
    },
    {
      title: '项目地址',
      key: 'JSDZ',
      dataIndex: 'JSDZ',
      width: '20%',
      align: 'center'
    },
    {
      title: '申报事项',
      key: 'BUSINESSNAME',
      dataIndex: 'BUSINESSNAME',
      width: '18%',
      align: 'center'
    },
    {
      title: '操作',
      key: 'operation',
      dataIndex: 'operation',
      width: '10%',
      align: 'center',
      scopedSlots: { customRender: 'action' }
    }
  ],
  officialRelation: [
    {
      title: '公文类型',
      key: 'GWLX',
      dataIndex: 'GWLX',
      width: '12%',
      align: 'center'
    },
    {
      title: '来文字号',
      key: 'GWBH',
      dataIndex: 'GWBH',
      width: '12%',
      align: 'center'
    },
    {
      title: '公文标题',
      key: 'GWBT',
      dataIndex: 'GWBT',
      width: '30%',
      align: 'center'
    },
    {
      title: '单位名称',
      key: 'DWMC',
      dataIndex: 'DWMC',
      width: '18%',
      align: 'center'
    },
    {
      title: '登记时间',
      key: 'CREATETIME',
      dataIndex: 'CREATETIME',
      width: '18%',
      align: 'center',
      customRender: function (text, row, index) {
        return moment(row.CREATETIME).format('YYYY-MM-DD')
      }
    },
    {
      title: '操作',
      key: 'operation',
      dataIndex: 'operation',
      width: '10%',
      align: 'center',
      scopedSlots: { customRender: 'action' }
    }
  ],
  meetingRelation: [
    {
      title: '会议类型',
      key: 'TYPE',
      dataIndex: 'TYPE',
      width: '12%',
      align: 'center'
    },
    {
      title: '会议编号',
      key: 'NO',
      dataIndex: 'NO',
      width: '12%',
      align: 'center'
    },
    {
      title: '会议名称',
      key: 'NAME',
      dataIndex: 'NAME',
      width: '28%',
      align: 'center'
    },
    {
      title: '主持人',
      key: 'HOSTUSERNAME',
      dataIndex: 'HOSTUSERNAME',
      width: '10%',
      align: 'center'
    },
    {
      title: '会议状态',
      key: 'STATE',
      dataIndex: 'STATE',
      width: '10%',
      align: 'center'
    },
    {
      title: '会议时间',
      key: 'MEETINGTIME',
      dataIndex: 'MEETINGTIME',
      width: '10%',
      align: 'center',
      customRender: function (text, row, index) {
        return moment(row.MEETINGTIME).format('YYYY-MM-DD')
      }
    },
    {
      title: '操作',
      key: 'operation',
      dataIndex: 'operation',
      width: '10%',
      align: 'center',
      scopedSlots: { customRender: 'action' }
    }
  ],
  reviseLog: [
    {
      title: '字段名称',
      key: 'FIELDDESC',
      dataIndex: 'FIELDDESC',
      width: '10%',
      align: 'center'
    },
    {
      title: '修改内容',
      key: 'CONTENT',
      dataIndex: 'CONTENT',
      width: '35%',
      align: 'center'
    },
    {
      title: '操作时间',
      key: 'STARTTIME',
      dataIndex: 'STARTTIME',
      width: '15%',
      align: 'center',
      customRender: function (text, row, index) {
        return moment(row.STARTTIME).format('YYYY-MM-DD HH:mm:ss')
      }
    },
    {
      title: '人员',
      key: 'USERNAME',
      dataIndex: 'USERNAME',
      width: '10%',
      align: 'center'
    }, {
      title: '环节',
      key: 'ACTIVITYNAME',
      dataIndex: 'ACTIVITYNAME',
      width: '10%',
      align: 'center'
    }
  ],
  materialColumn: [
    {
      title: 'id',
      dataIndex: 'id',
      width: '10%',
      align: 'center'
    },
    {
      title: '材料名称',
      dataIndex: 'material_name',
      align: 'center',
      width: '70%'
    },
    {
      title: '排序',
      dataIndex: 'customSortID',
      width: '20%',
      scopedSlots: { customRender: 'customSortID' },
      align: 'center'
    }
  ],
  multiFormSelected: [
    {
      title: '事项表单字段',
      dataIndex: 'code',
      width: '70%',
      scopedSlots: { customRender: 'code' },
      align: 'center'
    },
    {
      title: '排序',
      dataIndex: 'sortNum',
      width: '30%',
      scopedSlots: { customRender: 'sortNum' },
      align: 'center'
    }
  ],
  interfaceQueryParams: [
    {
      title: '参数名',
      dataIndex: 'name',
      align: 'center',
      width: '20%',
      scopedSlots: { customRender: 'name' }
    },
    {
      title: '类型',
      dataIndex: 'type',
      align: 'center',
      width: '10%',
      scopedSlots: { customRender: 'type' }
    },
    {
      title: '必填',
      dataIndex: 'require',
      width: '10%',
      align: 'center',
      scopedSlots: { customRender: 'require' }
    },
    {
      title: '示例值',
      dataIndex: 'example',
      width: '20%',
      align: 'center',
      scopedSlots: { customRender: 'input' }
    },
    {
      title: '说明',
      dataIndex: 'desc',
      width: '30%',
      align: 'center',
      scopedSlots: { customRender: 'input' }
    },
    {
      title: '操作',
      dataIndex: 'opt',
      align: 'center',
      width: '10%',
      scopedSlots: { customRender: 'opt' }
    }
  ],
  interfacePathParams: [
    {
      title: '参数名',
      dataIndex: 'name',
      align: 'center',
      width: '220px',
      scopedSlots: { customRender: 'name' }
    },
    {
      title: '类型',
      dataIndex: 'type',
      align: 'center',
      width: '120px',
      scopedSlots: { customRender: 'type' }
    },
    {
      title: '必填',
      dataIndex: 'require',
      width: '100px',
      align: 'center',
      scopedSlots: { customRender: 'require' }
    },
    {
      title: '示例值',
      dataIndex: 'example',
      width: '220px',
      align: 'center',
      scopedSlots: { customRender: 'input' }
    },
    {
      title: '说明',
      dataIndex: 'desc',
      align: 'center',
      scopedSlots: { customRender: 'input' }
    }
  ],
  interfaceRouting: [
    {
      title: '名称',
      dataIndex: 'name',
      key: 'name',
      align: 'center',
      width: '30%',
      scopedSlots: { customRender: 'name' }
    },
    {
      title: '时间',
      dataIndex: 'time',
      key: 'time',
      align: 'center',
      width: '200px',
      scopedSlots: { customRender: 'time' }
    },
    {
      title: '路由',
      dataIndex: 'route',
      key: 'route',
      align: 'center',
      scopedSlots: { customRender: 'route' }
    },
    {
      title: '操作',
      dataIndex: 'opt',
      align: 'center',
      width: '10%',
      scopedSlots: { customRender: 'opt' }
    }
  ],
  messageSubscription: [
    {
      title: '序号',
      dataIndex: 'xh',
      key: 'xh',
      align: 'center',
      width: '80px',
      scopedSlots: { customRender: 'xh' }
    },
    {
      title: '消息名称',
      dataIndex: 'xxmc',
      key: 'xxmc',
      align: 'center',
      scopedSlots: { customRender: 'input' }
    },
    {
      title: '回调地址',
      dataIndex: 'hddz',
      key: 'hddz',
      align: 'center',
      scopedSlots: { customRender: 'input' }
    },
    {
      title: '订阅时间',
      dataIndex: 'dysj',
      key: 'dysj',
      align: 'center',
      width: '200px',
      scopedSlots: { customRender: 'dysj' }
    },
    {
      title: '订阅状态',
      dataIndex: 'dyzt',
      key: 'dyzt',
      align: 'center',
      scopedSlots: { customRender: 'dyzt' }
    },
    {
      title: '操作',
      dataIndex: 'cz',
      key: 'cz',
      align: 'center',
      scopedSlots: { customRender: 'opt' }
    }
  ],
  messageTemplate: [
    {
      title: '模板名称',
      dataIndex: 'templateName',
      key: 'templateName',
      align: 'center'
    },
    {
      title: '模板内容',
      dataIndex: 'templateContent',
      key: 'templateContent',
      align: 'center',
      width: '30%',
      ellipsis: true
    },
    {
      title: '创建时间',
      dataIndex: 'createTime',
      key: 'createTime',
      align: 'center',
      scopedSlots: { customRender: 'createTime' }
    }
  ],
  messageEvent: [
    {
      title: '事件名称',
      dataIndex: 'eventName',
      key: 'eventName',
      align: 'center'
    },
    {
      title: '备注',
      dataIndex: 'bz',
      key: 'bz',
      align: 'center',
      width: '30%',
      ellipsis: true
    },
    {
      title: '创建时间',
      dataIndex: 'createTime',
      key: 'createTime',
      align: 'center',
      scopedSlots: { customRender: 'createTime' }
    }
  ],
  templateManage: [
    {
      title: '序号',
      dataIndex: 'xh',
      key: 'xh',
      align: 'center',
      width: '80px',
      scopedSlots: { customRender: 'xh' }
    },
    {
      title: '模板名称',
      dataIndex: 'templateName',
      key: 'templateName',
      align: 'center'
    },
    {
      title: '动态模板',
      dataIndex: 'dynamicTemplate',
      key: 'dynamicTemplate',
      align: 'center',
      scopedSlots: { customRender: 'dynamicTemplate' }
    },
    {
      title: '数据服务名称',
      dataIndex: 'dataServiceName',
      key: 'dataServiceName',
      align: 'center'
    },
    {
      title: '添加时间',
      dataIndex: 'createTime',
      key: 'createTime',
      align: 'center',
      scopedSlots: { customRender: 'createTime' }
    },
    {
      title: '操作',
      key: 'opt',
      align: 'center',
      scopedSlots: { customRender: 'opt' }
    }
  ],
  selectSqlConfig: [
    {
      title: ' ',
      align: 'center',
      width: '80px',
      scopedSlots: { customRender: 'xh' }
    },
    {
      title: '名称',
      dataIndex: 'name',
      key: 'name',
      width: '35%',
      ellipsis: true
    },
    {
      title: '简称',
      dataIndex: 'nick',
      key: 'nick',
      width: '35%',
      ellipsis: true
    },
    {
      title: '存储库',
      dataIndex: 'repositoryName',
      key: 'repositoryName'
    }
  ],
  eventManage: [
    {
      title: '序号',
      dataIndex: 'xh',
      key: 'xh',
      align: 'center',
      width: '80px',
      scopedSlots: { customRender: 'xh' }
    },
    {
      title: '事件名称',
      dataIndex: 'eventName',
      key: 'eventName',
      align: 'center'
    },
    {
      title: '创建时间',
      dataIndex: 'createTime',
      key: 'createTime',
      align: 'center',
      scopedSlots: { customRender: 'createTime' }
    },
    {
      title: '备注',
      dataIndex: 'bz',
      key: 'bz',
      align: 'center',
      width: '30%',
      ellipsis: true
    },
    {
      title: '操作',
      key: 'opt',
      align: 'center',
      scopedSlots: { customRender: 'opt' }
    }
  ],
  messageSetting: [
    {
      title: '消息发送',
      align: 'center',
      dataIndex: 'msgSend',
      key: 'msgSend',
      scopedSlots: { customRender: 'msgSend' }
    },
    {
      title: '消息前缀',
      align: 'center',
      dataIndex: 'msgPrefix',
      key: 'msgPrefix',
      scopedSlots: { customRender: 'input' }
    },
    {
      title: '消息后缀',
      align: 'center',
      dataIndex: 'msgSuffix',
      key: 'msgSuffix',
      scopedSlots: { customRender: 'input' }
    },
    {
      title: '消息模板',
      align: 'center',
      dataIndex: 'msgTemp',
      key: 'msgTemp',
      scopedSlots: { customRender: 'select' }
    },
    {
      title: '消息事件',
      align: 'center',
      dataIndex: 'msgEvent',
      key: 'msgEvent',
      scopedSlots: { customRender: 'select' }
    },
    {
      title: '操作',
      key: 'opt',
      align: 'center',
      scopedSlots: { customRender: 'opt' }
    }
  ]
}

export function getColumns (columnsName) {
  return columns[columnsName]
}

/**
 * 根据数据字典获取表格字段配置
 * @param dictName
 */
export async function getColumnsByDict (dictName) {
  try {
    const dict = await dicService.treeDicItemByDicName(dictName)
    const configColumns = dict.find(o => o.name === '字段配置').children
    const rowEditable = dict.find(o => o.name === '行编辑')
    const defaultAlign = 'center'
    const chFields = ['width', 'align', 'editable']
    const columns = configColumns.map(o => {
      const col = {
        title: o.name,
        dataIndex: o.value,
        align: defaultAlign,
        editable: !!rowEditable
      }
      if (rowEditable) {
        col.scopedSlots = { customRender: col.dataIndex }
      }
      if (o.children) {
        for (const { name, value } of o.children) {
          if (chFields.includes(name)) {
            col[name] = value
          }
        }
      }
      return col
    })
    if (rowEditable) {
      columns.push({
        title: '操作',
        align: defaultAlign,
        width: 140,
        scopedSlots: { customRender: 'operation' }
      })
    }
    return columns
  } catch (e) {
    console.error(`getColumnsByDict error ${dictName}`)
    console.error(e)
    return []
  }
}
